具有自定义分隔符和新列名的列表变量的一次性编码

One-hot encoding for list variable with customized delimiter and new column names

我的数据:

Rank    Platforms        Technology

high    Windows||Linux   Unity
high    Linux             
low     Windows          Unreal 
low     Linux||MacOs     GameMakerStudio||Unity||Unreal
low                      GameMakerStudio
low

我想把它转换成这样:

Rank    platform_Windows  platform_linux  platform_MacOs technology_unity  technology_unreal technology_GameMakerStudio

high    1                 0                0             1                  0                   1
high    0                 1                0             0                  0                   0
low     1                 0                0             0                  1                   0 
low     0                 1                1             1                  1                   1 
low     0                 0                0             0                  0                   1
low     0                 0                0             0                  0                   0

所以这是一种一次性编码。我关注了很多答案:

  1. Pandas get_dummies 创建一个带有分隔符 = ' ' 和字符级分隔的热点 [重复]
  2. 如何从包含列表的 pandas 列进行单热编码?

问题是:

我当前的代码是:

df.drop('Platforms', 1).join(
    pd.get_dummies(
        pd.DataFrame(df.Platforms.str.split("||").tolist()).stack(),
        prefix=['platform']
    ).assum(level=0)
)

df.drop('Technology', 1).join(
    pd.get_dummies(
        pd.DataFrame(df.Technology.str.split("||").tolist()).stack(),
        prefix=['technology']
    ).assum(level=0)
)

但我得到的错误是:

TypeError: object of type 'float' has no len()

我已阅读文档pandas.get_dummies and pandas.Series.str.get_dummies。后者似乎接受自定义分隔符,而前者允许自定义新列前缀...

你可以这样做:

s = [df[col].str.get_dummies().add_prefix(f'{col.lower()}_') 
        for col in ['Platforms', 'Technology']]

pd.concat([df[['Rank']]] + s, axis=1)